iT邦幫忙

2024 iThome 鐵人賽

DAY 11
0
Kubernetes

Kubernetes三十天就上手系列 第 11

Day 11- 使用 ConfigMaps 管理組態資料

  • 分享至 

  • xImage
  •  

使用 ConfigMaps 管理組態資料

ConfigMaps 的基本概念

ConfigMaps 的作用:
ConfigMaps 是 Kubernetes 中用來將組態資料與容器映像分離的關鍵元件。它允許以鍵值對形式儲存非機密資料,例如應用設定參數,並提供靈活的方式將這些設定傳遞到容器中。這使得在不同環境下的應用程式能夠保持一致性並簡化部署。

ConfigMaps 的結構:
ConfigMaps 包含 apiVersionkindmetadatadata 部分,這些元素構成了 ConfigMaps 的定義。通常,我們會透過 YAML 或 CLI 指令來創建和管理 ConfigMaps。

創建 ConfigMaps

從命令列創建:
可以直接透過命令列指定設定參數來創建 ConfigMaps,例如:

kubectl create configmap example-config --from-literal=app.color=blue --from-literal=app.mode=production

這種方法適合處理簡單的組態資料。

從 YAML 檔案創建:
若有較複雜的設定需求,則建議使用 YAML 定義檔案來創建 ConfigMaps。以下是範例:

apiVersion: v1
kind: ConfigMap
metadata:
  name: example-config
data:
  app.color: blue
  app.mode: production

使用以下指令來套用 YAML 定義檔案:

kubectl apply -f example-config.yaml

這種方法能更直觀地管理組態資料,並有助於版本控制。

使用 ConfigMaps

ConfigMaps 提供了三種主要的使用方式:作為環境變數、命令列參數以及組態檔案。

作為環境變數

當應用程式從環境變數中讀取設定時,這是最常見的使用方式。以下是使用 ConfigMap 作為環境變數的 YAML 定義:

apiVersion: v1
kind: Pod
metadata:
  name: configmap-env-pod
spec:
  containers:
  - name: app-container
    image: nginx:latest
    env:
    - name: APP_COLOR
      valueFrom:
        configMapKeyRef:
          name: example-config
          key: app.color
    - name: APP_MODE
      valueFrom:
        configMapKeyRef:
          name: example-config
          key: app.mode

這種方式簡單直接,適合快速設定應用程式。

作為命令列參數

如果應用程式需要透過命令列參數來接收設定,可以這樣設定:

apiVersion: v1
kind: Pod
metadata:
  name: configmap-cmd-pod
spec:
  containers:
  - name: app-container
    image: busybox
    command: [ "sh", "-c", "echo $(APP_COLOR) $(APP_MODE)" ]
    env:
    - name: APP_COLOR
      valueFrom:
        configMapKeyRef:
          name: example-config
          key: app.color
    - name: APP_MODE
      valueFrom:
        configMapKeyRef:
          name: example-config
          key: app.mode

這種設定適合需要靈活組合參數的應用場景。

作為組態檔案

某些應用程式需要從檔案中讀取設定。在這種情況下,ConfigMaps 可以模擬檔案系統,將資料掛載到容器中。這是一個例子:

  1. 透過命令列創建 ConfigMap:
kubectl create configmap nginx-config --from-file=index.html=index.html
  1. 或是透過 YAML 檔案:
apiVersion: v1
kind: ConfigMap
metadata:
  name: nginx-config
data:
  index.html: |
    <html>
    <body>
    <h1>Welcome to Nginx</h1>
    </body>
    </html>
  1. 設定 Pod 來使用這個 ConfigMap:
apiVersion: v1
kind: Pod
metadata:
  name: configmap-pod-file
spec:
  containers:
  - name: nginx
    image: nginx:latest
    volumeMounts:
    - name: config-volume
      mountPath: /usr/share/nginx/html
      subPath: index.html
  volumes:
  - name: config-volume
    configMap:
      name: nginx-config

在這個設定中,Nginx 的首頁內容將會被這個 ConfigMap 中的 index.html 檔案替換。

管理 ConfigMaps

查看 ConfigMaps

可以通過以下指令檢視現有的 ConfigMaps:

kubectl get configmaps

以下指令可以查看該 ConfigMap 的詳細資訊:

kubectl describe configmap example-config

這些指令讓你快速檢視 ConfigMaps 的內容。

更新 ConfigMaps

當需要更新 ConfigMap 時,可以使用以下指令:

kubectl edit configmap example-config

更新後的組態將自動套用於所有引用該 ConfigMap 的 Pod,無需重啟。

總結

ConfigMaps 是 Kubernetes 中的重要組態管理工具,它有效地將應用設定從容器映像中分離,從而提高了應用程式的靈活性和可維護性。本文介紹了 ConfigMaps 的基本概念、創建方式、應用場景以及管理方法。掌握這些知識後,你將能更靈活地管理 Kubernetes 中的應用組態,進一步提高部署效率。

在接下來的學習中,我們將探討如何使用 Secrets 來管理敏感資訊,這將有助於你更全面地理解 Kubernetes 的設定管理能力。


上一篇
Day 10- Kubernetes 中的 Service
下一篇
Day 12- 使用 Secrets 管理敏感資訊
系列文
Kubernetes三十天就上手30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言